home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2007 December / PCWKCD1207B.iso / Blogowanie poza sfera / Flock 0.9.1.3 stable / flock-0.9.1.3.en-US.win32.exe / flock / components / flockMigrationManager.js < prev    next >
Text File  |  2007-10-12  |  4KB  |  158 lines

  1. //
  2. // BEGIN FLOCK GPL
  3. // 
  4. // Copyright Flock Inc. 2005-2007
  5. // http://flock.com
  6. // 
  7. // This file may be used under the terms of of the
  8. // GNU General Public License Version 2 or later (the "GPL"),
  9. // http://www.gnu.org/licenses/gpl.html
  10. // 
  11. // Software distributed under the License is distributed on an "AS IS" basis,
  12. // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  13. // for the specific language governing rights and limitations under the
  14. // License.
  15. // 
  16. // END FLOCK GPL
  17. //
  18.  
  19. const MM_CONTRACTID = "@flock.com/migration-manager;1";
  20. const MM_CLASSID    = Components.ID("{481E822D-937F-4E76-8AFC-F636061B7AC6}");
  21. const MM_CLASSNAME  = "Flock Migration Manager";
  22.  
  23.  
  24. const Cc = Components.classes;
  25. const Ci = Components.interfaces;
  26. const Cr = Components.results;
  27.  
  28.  
  29. function DEBUG(x) {
  30.   debug("flockMigrationManager: " + x + "\n");  
  31. }
  32.  
  33. function MigrationManager() {
  34. }
  35.  
  36. MigrationManager.prototype = {
  37.   getMigrationArgs: function MM_getMigrationArgs(oldVersion) {
  38.     var args = Cc['@mozilla.org/supports-array;1']
  39.       .createInstance(Ci.nsISupportsArray);
  40.  
  41.     var versionStr = Cc['@mozilla.org/supports-cstring;1']
  42.       .createInstance(Ci.nsISupportsCString);
  43.     versionStr.data = oldVersion;
  44.     args.AppendElement(versionStr);
  45.     
  46.     var catman = Cc['@mozilla.org/categorymanager;1']
  47.       .getService(Ci.nsICategoryManager);
  48.  
  49.     var e = catman.enumerateCategory('flockMigratable');
  50.     while (e.hasMoreElements()) {
  51.       var entry = e.getNext().QueryInterface(Ci.nsISupportsCString);
  52.       if (!entry)
  53.         continue;
  54.  
  55.       var contractID = catman.getCategoryEntry('flockMigratable', entry.data);
  56.       var service = Cc[contractID].getService(Ci.flockIMigratable);
  57.  
  58.       try {
  59.         DEBUG("Checking " + service.shortname);
  60.         if (service.needsMigration(oldVersion))
  61.           args.AppendElement(service);
  62.       } catch (e) { 
  63.         DEBUG(e);
  64.       }
  65.     }
  66.  
  67.     DEBUG('Found '+ (args.Count() - 1) + ' services needing migration');
  68.     return args;
  69.   },
  70.  
  71.   getInterfaces: function MM_getInterfaces(countRef) {
  72.     var interfaces = [Ci.flockIMigrationManager, Ci.nsIClassInfo]
  73.     countRef.value = interfaces.length;
  74.     return interfaces;
  75.   },
  76.   getHelperForLanguage: function MM_getHelperForLanguage(language) {
  77.     return null;
  78.   },
  79.   contractID: MM_CONTRACTID,
  80.   classDescription: MM_CLASSNAME,
  81.   classID: MM_CLASSID,
  82.   implementationLanguage: Ci.nsIProgrammingLanguage.JAVASCRIPT,
  83.   flags: Ci.nsIClassInfo.SINGLETON,
  84.  
  85.   QueryInterface: function MM_QueryInterface(iid) {
  86.     if (iid.equals(Ci.flockIMigrationManager) ||
  87.         iid.equals(Ci.nsIClassInfo) ||
  88.         iid.equals(Ci.nsISupports))
  89.       return this;
  90.     throw Cr.NS_ERROR_NO_INTERFACE;
  91.   }
  92. }
  93.  
  94.  
  95. function GenericComponentFactory(ctor) {
  96.   this._ctor = ctor;
  97. }
  98.  
  99. GenericComponentFactory.prototype = {
  100.  
  101.   _ctor: null,
  102.  
  103.   // nsIFactory
  104.   createInstance: function(outer, iid) {
  105.     if (outer != null)
  106.       throw Cr.NS_ERROR_NO_AGGREGATION;
  107.     return (new this._ctor()).QueryInterface(iid);
  108.   },
  109.  
  110.   // nsISupports
  111.   QueryInterface: function(iid) {
  112.     if (iid.equals(Ci.nsIFactory) ||
  113.         iid.equals(Ci.nsISupports))
  114.       return this;
  115.     throw Cr.NS_ERROR_NO_INTERFACE;
  116.   },
  117. };
  118.  
  119. var Module = {
  120.   QueryInterface: function(iid) {
  121.     if (iid.equals(Ci.nsIModule) ||
  122.         iid.equals(Ci.nsISupports))
  123.       return this;
  124.  
  125.     throw Cr.NS_ERROR_NO_INTERFACE;
  126.   },
  127.  
  128.   getClassObject: function(cm, cid, iid) {
  129.     if (!iid.equals(Ci.nsIFactory))
  130.       throw Cr.NS_ERROR_NOT_IMPLEMENTED;
  131.  
  132.     if (cid.equals(MM_CLASSID))
  133.       return new GenericComponentFactory(MigrationManager)
  134.  
  135.     throw Cr.NS_ERROR_NO_INTERFACE;
  136.   },
  137.  
  138.   registerSelf: function(cm, file, location, type) {
  139.     var cr = cm.QueryInterface(Ci.nsIComponentRegistrar);
  140.     cr.registerFactoryLocation(MM_CLASSID, MM_CLASSNAME, MM_CONTRACTID,
  141.                                file, location, type);
  142.   },
  143.  
  144.   unregisterSelf: function(cm, location, type) {
  145.     var cr = cm.QueryInterface(Ci.nsIComponentRegistrar);
  146.     cr.unregisterFactoryLocation(MM_CLASSID, location);
  147.   },
  148.  
  149.   canUnload: function(cm) {
  150.     return true;
  151.   },
  152. };
  153.  
  154. function NSGetModule(compMgr, fileSpec)
  155. {
  156.   return Module;
  157. }
  158.